{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**通用最佳实践回顾**\n",
    "\n",
    "- `std::span<T>` 是 C++20 引入的轻量级、非拥有视图，可统一处理 C 风格数组、`std::array`、`std::vector` 等连续内存容器；无需拷贝即可在 API 间传递数据切片。\n",
    "- 视图不管理底层数据生命周期，需确保源数据在 `std::span` 有效期内保持存在且未被释放或重分配（对 `std::vector` 而言，在 `span` 存活期间禁止导致重新分配的操作）。\n",
    "- `std::span` 支持 `span<T>` 与 `span<const T>` 间的安全转换，允许对同一缓冲创建多个不同维度/子范围视图；通过 `first`、`last`、`subspan` 切片可快速定位窗口。\n",
    "- 对于字节视图可使用 `std::span<std::byte>` 或 `std::span<char>`；若需 reinterpret，推荐使用 `std::as_bytes` / `std::as_writable_bytes` 来保证类型安全。\n",
    "- 函数参数接受 `std::span` 时，可同时兼容动态长度（运行期长度）与固定长度（编译期长度）视图；如需静态验证长度，可使用 `std::span<T, N>` 的定长版本。\n",
    "- `std::span` 仅保证元素连续，不提供内存对齐保证；在 SIMD/向量化场景下需结合 `std::align` 或 SIMD 库确保对齐。\n",
    "- 不宜持有指向临时容器或局部数组的 `span` 返回值；若需跨作用域保存视图，确保底层缓冲拥有更长生命周期。\n",
    "- `std::span` 可作为接口层，用于替代传统的 `T*` + 长度参数，增强类型安全并减轻错误风险。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "| 序号 | 工程场景                              | 文件名                    | 说明要点                                                     | 可运行示例代码             |\n",
    "| ---- | ------------------------------------- | ------------------------- | ------------------------------------------------------------ | -------------------------- |\n",
    "| 1    | 统一 C 数组 / `vector` / `array` 参数 | `span_unified_params.cpp` | 函数参数使用 `std::span`，一次性支持多种连续容器类型；演示切片与只读/读写视图。 | 示例 1：统一容器参数接口   |\n",
    "| 2    | I/O / 文件 / 内存映射缓冲视图         | `span_io_buffer.cpp`      | 将文件内容读入缓冲区后通过 `std::span` 分块处理，展示 `as_bytes` 用法。 | 示例 2：I/O 缓冲视图       |\n",
    "| 3    | SIMD / 向量化内核的切片传参           | `span_simd_kernel.cpp`    | 将数据切片传递给向量化内核，示例中使用简单循环模拟并展示对齐检查。 | 示例 3：向量化切片传参     |\n",
    "| 4    | 传感器 / 采样数据窗口                 | `span_sensor_window.cpp`  | 使用滚动 `span` 处理传感器数据窗口，实现滑动平均并演示动态窗口移动。 | 示例 4：传感器数据窗口处理 |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 示例 1：统一容器参数接口（span_unified_params.cpp）\n",
    "- 示例 2：I/O 缓冲视图（span_io_buffer.cpp）\n",
    "- 示例 3：向量化切片传参（span_simd_kernel.cpp）\n",
    "- 示例 4：传感器数据窗口处理（span_sensor_window.cpp）"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "C++17",
   "language": "C++17",
   "name": "xcpp17"
  },
  "language_info": {
   "name": "C++17"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
